package com.aube.plugin.gallery.preview;

import android.content.Context;
import android.content.Intent;
import android.net.Uri;

import com.android.volley.toolbox.BasicNetwork;
import com.huyn.baseframework.ImageLoader;
import com.huyn.baseframework.utils.Constant;
import com.huyn.baseframework.utils.ImageParamUtils;
import com.huyn.baseframework.utils.StringUtils;
import com.huyn.baseframework.utils.Utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

/**
 * Created by huyn on 2015/12/29.
 */
public class ImgPreviewHelper {

    public static void saveToFile(Context context, String path, File destFile) {
        FileInputStream fosfrom = null;
        FileOutputStream fosto = null;
        try {
            File fromFile = new File(path);
            if(!fromFile.exists())
                return;

            if(destFile == null)
                return;

            fosfrom = new FileInputStream(fromFile);
            fosto = new FileOutputStream(destFile);

            byte bt[] = new byte[1024];

            int c;
            while ((c = fosfrom.read(bt)) > 0) {
                fosto.write(bt, 0, c);
            }

            Utils.showToast(context, "图片已保存至" + destFile.getParentFile().getAbsolutePath() + "文件夹中");
        } catch (Exception e) {
            e.printStackTrace();
            Utils.showToast(context, "保存失败");
        } finally {
            try {
                if(fosfrom != null)
                    fosfrom.close();
                if(fosto != null) {
                    fosto.flush();
                    fosto.close();
                }
            } catch (Exception e) {

            }
        }
    }

    public static void savePic(Context context, String url) {
        try {
            boolean isLocalFile = false;
            String picSuffix= ".jpg";
            if (url.endsWith(".gif")){
                picSuffix = ".gif";
            } else {
                //如果是剧照，检查是否存在对应的下载图片，然后指向改地址
                File cacheFile = BasicNetwork.newImgFile(url);
                if(cacheFile != null && cacheFile.exists()) {
                    url = cacheFile.getAbsolutePath();
                    isLocalFile = true;
                }
            }

            //保存至相册
            final File bitmapFile = new File(Constant.SD_CARK_ROOT + "/DCIM/Camera/" + System.currentTimeMillis() + picSuffix);
            if (!bitmapFile.getParentFile().exists()) {
                bitmapFile.getParentFile().mkdirs();
                bitmapFile.createNewFile();
            }


            if(isLocalFile) {
                saveToFile(context, url, bitmapFile);
            } else {
                savePic(context, url, bitmapFile);
            }

            //通知相册刷新
            Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
            Uri uri = Uri.fromFile(bitmapFile);
            intent.setData(uri);
            context.sendBroadcast(intent);

        } catch (Exception e) {
            e.printStackTrace();
            Utils.showToast(context, "保存失败");
        } catch (OutOfMemoryError e) {
            Utils.showToast(context, "保存失败");
        }
    }

    private static boolean showToast = false;
    private static void savePic(final Context context, String url, final File bitmapFile){
        /**
         * 问题：是否显示过渡图片,感觉没有必要
         */
        showToast = false;
        ImageLoader.getInstance(context).preloadBitmapToFile(ImageParamUtils.getGalleryPicArg(url), new ImageLoader.IPreloadCallback<String>() {
            @Override
            public void onSuccess(String s) {
                if(StringUtils.isNotBlank(s)) {
                    try {
                        Utils.copyToFile(s, bitmapFile);
                        if (!showToast) {
                            showToast = true;
                            Utils.showToast(context, "图片已保存至" + bitmapFile.getParentFile().getAbsolutePath() + "文件夹中");
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                        Utils.showToast(context, "保存失败");
                    } catch (OutOfMemoryError e) {
                        Utils.showToast(context, "保存失败");
                    }
                } else {
                    Utils.showToast(context, "保存失败");
                }
            }

            @Override
            public void onFail() {
                Utils.showToast(context, "保存失败");
            }
        });
    }
    
}
